e1a0885ce98419faf0868e3cc4a938cfec485a8d,languages/baseLanguage/baseLanguage/source_gen/jetbrains/mps/baseLanguage/typesystem/subtyping_classifier_SubtypingRule.java,subtyping_classifier_SubtypingRule,getSubOrSuperTypes,#SNode#TypeCheckingContext#IsApplicableStatus#,27

Before Change


    for (SNode supertype : supertypes) {
      SNode supertypeCopy = SNodeOperations.cast(SNodeOperations.copyNode(supertype), "jetbrains.mps.baseLanguage.structure.ClassifierType");
      for (SNode typeParam : SLinkOperations.getTargets(supertypeCopy, "parameter", true)) {
        for (SNode typeVar : SNodeOperations.getDescendants(typeParam, "jetbrains.mps.baseLanguage.structure.TypeVariableReference", true, new String[]{})) {
          int i = ListSequence.fromList(SLinkOperations.getTargets(classifier, "typeVariableDeclaration", true)).indexOf(SLinkOperations.getTarget(typeVar, "typeVariableDeclaration", false));
          if (!(i < 0 || i >= ListSequence.fromList(SLinkOperations.getTargets(clt, "parameter", true)).count())) {
            // substitute the typevar ref with the existing type from the original CT 

After Change


    for (SNode supertype : supertypes) {
      SNode supertypeCopy = SNodeOperations.cast(SNodeOperations.copyNode(supertype), "jetbrains.mps.baseLanguage.structure.ClassifierType");
      for (SNode typeParam : SLinkOperations.getTargets(supertypeCopy, "parameter", true)) {
        List<SNode> descendants = ListSequence.fromList(SNodeOperations.getDescendants(typeParam, "jetbrains.mps.baseLanguage.structure.TypeVariableReference", true, new String[]{})).toListSequence();
        for (SNode typeVar : descendants) {
          int i = ListSequence.fromList(SLinkOperations.getTargets(classifier, "typeVariableDeclaration", true)).indexOf(SLinkOperations.getTarget(typeVar, "typeVariableDeclaration", false));
          if (0 <= i && i < ListSequence.fromList(SLinkOperations.getTargets(clt, "parameter", true)).count()) {